-- Copyright 2016 The Cartographer Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--      http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,  -- 设置地图构建器，使用预定义的 MAP_BUILDER
  trajectory_builder = TRAJECTORY_BUILDER,  -- 设置轨迹构建器，使用预定义的 TRAJECTORY_BUILDER
  map_frame = "map",  -- 定义地图坐标框架名称为 "map"
  tracking_frame = "lidar",  -- 定义用于跟踪的坐标框架名称为 "lidar"
  published_frame = "lidar",  -- 定义发布的坐标框架名称为 "lidar"
  odom_frame = "odom",  -- 定义里程计坐标框架名称为 "odom"
  provide_odom_frame = true,  -- 设置是否提供里程计坐标框架，值为 true
  publish_frame_projected_to_2d = false,  -- 设置是否将发布的坐标框架投影到二维平面，值为 false
  use_pose_extrapolator = true,  -- 设置是否使用姿态外推器，值为 true，以提高定位精度
  use_odometry = false,  -- 设置是否使用里程计数据，值为 false，不使用里程计
  use_nav_sat = false,  -- 设置是否使用导航卫星数据，值为 false，当前不使用
  use_landmarks = false,  -- 设置是否使用地标，值为 false，不使用地标数据
  num_laser_scans = 1,  -- 设置激光扫描的数量为 1
  num_multi_echo_laser_scans = 0,  -- 设置多回声激光扫描的数量为 0，当前不使用多回声
  num_subdivisions_per_laser_scan = 1,  -- 设置每个激光扫描的子分段数量为 1
  num_point_clouds = 0,  -- 设置点云的数量为 0，当前不处理点云数据
  lookup_transform_timeout_sec = 0.2,  -- 设置查找坐标变换的超时时间为 0.2 秒
  submap_publish_period_sec = 0.3,  -- 设置子地图的发布周期为 0.3 秒
  pose_publish_period_sec = 5e-3,  -- 设置姿态数据的发布周期为 5 毫秒
  trajectory_publish_period_sec = 30e-3,  -- 设置轨迹数据的发布周期为 30 毫秒
  rangefinder_sampling_ratio = 1.,  -- 设置激光测距仪的采样比例为 1，表示每次都采样
  odometry_sampling_ratio = 1.,  -- 设置里程计的采样比例为 1，表示每次都采样
  fixed_frame_pose_sampling_ratio = 1.,  -- 设置固定框架姿态的采样比例为 1，表示每次都采样
  imu_sampling_ratio = 1.,  -- 设置惯性测量单元的采样比例为 1，表示每次都采样
  landmarks_sampling_ratio = 1.,  -- 设置地标的采样比例为 1，表示每次都采样
}

-- 启用2D轨迹构建器
MAP_BUILDER.use_trajectory_builder_2d = true

-- 设置子地图的最大范围数据数量为35
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35

-- 设置轨迹构建器的最小范围为0.3米
TRAJECTORY_BUILDER_2D.min_range = 0.3

-- 设置轨迹构建器的最大范围为8米
TRAJECTORY_BUILDER_2D.max_range = 8.

-- 设置缺失数据的射线长度为1米
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.

-- 禁用IMU数据的使用
TRAJECTORY_BUILDER_2D.use_imu_data = false

-- 启用在线相关扫描匹配
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true

-- 设置实时相关扫描匹配器的线性搜索窗口为0.1米
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1

-- 设置平移增量代价权重为10
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.

-- 设置旋转增量代价权重为0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1

-- 设置Pose图优化问题的Huber尺度为100
POSE_GRAPH.optimization_problem.huber_scale = 1e2

-- 每35个节点进行一次优化
POSE_GRAPH.optimize_every_n_nodes = 35

-- 设置约束生成器的最小得分为0.65
POSE_GRAPH.constraint_builder.min_score = 0.65

return options
